#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    // 关闭了标准输出，因为printf底层用的流是stdout，所以printf没有任何输出
    close(1);

    // printf返回的是要打印的字符个数
    int n = printf("stdin->fd: %d\n",stdin->_fileno);
    printf("stdout->fd: %d\n",stdout->_fileno);
    printf("stderr->fd: %d\n",stderr->_fileno);
    
    // fprintf底层用的流是stderr,即标准错误流
    fprintf(stderr,"printf ret:%d\n",n);

    // char buffer[1024];
    // // 文件描述符0，1，2分别被键盘，显示器和显示器占用
    // // 即标准输入(stdin),标准输出(stdout),标准错误(stderr)
    // read(0,buffer,sizeof(buffer));
    // printf("echo:%s\n",buffer);
    // 
    // const char* str = "hello Linux\n";
    // write(1,str,strlen(str));
    // write(2,str,strlen(str));

    return 0;
}

// int main()
// {
//     // 设置进程的默认掩码值
//     // umask(0);
//     // open:系统调用，O_RDONLY(只读)，O_WRONLY(只写)，O_RDWR(可读写)，O_CRETA(创建)，O_APPEND(追加),O_TRUNC(清空)
//     // 如果文件不存在，则需要在打开方式的参数上加上O_CRETA
//     // 第三个参数是为这个文件赋予权限
//     // int fd = open("test.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);
    
//     int fd1 = open("test1.txt",O_WRONLY | O_CREAT | O_APPEND,0666);
//     int fd2 = open("test2.txt",O_WRONLY | O_CREAT | O_APPEND,0666);
//     int fd3 = open("test3.txt",O_WRONLY | O_CREAT | O_APPEND,0666);
//     int fd4 = open("test4.txt",O_WRONLY | O_CREAT | O_APPEND,0666);
//     // if(fd < 0)
//     // {
//     //     printf("open file error\n");
//     //     return 1;
//     // }

//     printf("fd1: %d\n",fd1);
//     printf("fd2: %d\n",fd2);
//     printf("fd3: %d\n",fd3);
//     printf("fd4: %d\n",fd4);
    
//     // const char* str = "bbbbbbb\n";
//     // write(fd,str,strlen(str));

//     // close(文件描述符)
//     // close(fd);

//     return 0;
// }

// #define ONE (1 << 0)    // 1
// #define TWO (1 << 1)    // 2
// #define THREE (1 << 2)  // 4
// #define FOUR (1 << 3)   // 8

// void show(int flags)
// {
//     if(flags & ONE)
//         printf("hello function1\n");
//     if(flags & TWO)
//         printf("hello function2\n");
//     if(flags & THREE)
//         printf("hello function3\n");
//     if(flags & FOUR)
//         printf("hello function4\n");
// }
// int main()
// {
//     printf("-------------------------------\n");
//     show(ONE);
//     printf("-------------------------------\n");
//     show(TWO);
//     printf("-------------------------------\n");
    
//     show(ONE | TWO);
//     printf("-------------------------------\n");
//     show(ONE | TWO | THREE);
//     printf("-------------------------------\n");
//     show(ONE | THREE);
//     printf("-------------------------------\n");
//     show(THREE | FOUR);
//     printf("-------------------------------\n");

//     return 0;
// }

// int main()
// {
//     // chdir:修改当前工作路径
//     // chdir("/home/zs");
    
//     // fopen:库函数，打开文件
//     // FILE* fp = fopen("test.txt","w");
//     FILE* fp = fopen("test.txt","a");
//     if(fp == NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     char *str = "Hello Linux!!!\n";
//     // fwrite:库函数，向文件写入
//     fwrite(str,strlen(str),1,fp);
//     // fprintf:库函数，向文件流执行
//     fprintf(stdout,"%s",str);
    
//     // 关闭文件
//     fclose(fp);

//     return 0;
// }
